
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *  Clase que implementa las Fichas que se ocuparan en el juego.
 * @author Matías Díaz
 * @author Sergio Flores
 * 
 */
public class JTriangulo
{

    private int numeroUp;
    private int numeroDown;
    private int numeroLeft;
    private int numeroRight;
    private Color colorUp;
    private Color colorDown;
    private Color colorLeft;
    private Color colorRight;
    private Point puntoInicialAux;
    private Point puntoInicial;
    private boolean estaEnTablero;
    private static final Font font = new Font ( CommandName.MY_FONT , Font.BOLD , 25 );

    public JTriangulo ()
    {
        this.numeroUp = -1;
        this.numeroDown = -1;
        this.numeroLeft = -1;
        this.numeroRight = -1;
        this.colorUp = null;
        this.colorDown = null;
        this.colorLeft = null;
        this.colorRight = null;
        this.puntoInicial = null;
        this.puntoInicialAux = null;
        this.estaEnTablero = false;
    }
    /**
     * Metodo constructor que inicializa el objeto
     * @param numeroUp numero del triangulo superior
     * @param numeroDown numero del triangulo inferior.
     * @param numeroLeft numero del triangulo de la izquierda
     * @param numeroRight numero del triangulo de la derecha.
     * @param colorUp  color del triangulo superior.
     * @param colorDown color del triangulo inferior.
     * @param colorLeft color del triangulo de la izquierda.
     * @param colorRight color del triangulo de la derecha.
     * @param puntoInicial  punto inicial de la ficha.
     */
    public JTriangulo ( int numeroUp , int numeroDown , int numeroLeft ,
            int numeroRight , Color colorUp , Color colorDown ,
            Color colorLeft , Color colorRight , Point puntoInicial )
    {
        this.numeroUp = numeroUp;
        this.numeroDown = numeroDown;
        this.numeroLeft = numeroLeft;
        this.numeroRight = numeroRight;
        this.colorUp = colorUp;
        this.colorDown = colorDown;
        this.colorLeft = colorLeft;
        this.colorRight = colorRight;
        this.puntoInicialAux = puntoInicial;
        this.puntoInicial = puntoInicial;
        this.estaEnTablero = false;

    }

    /**
     * Metodo que cambia el punto inicial de una ficha.
     * @param point punto al que se cambiara la ficha.
     */
    public void moveTriangulo ( Point point )
    {
        this.puntoInicialAux = point;
    }

    /**
     * metodo que retorna el numero inferior.
     * @return numero inferior.
     */
    public int getNumeroDown ()
    {
        return numeroDown;
    }

    /**
     * metodo que setea el numero inferior.
     * @param numeroDown numero inferior.
     */
    public void setNumeroDown ( int numeroDown )
    {
        this.numeroDown = numeroDown;
    }

    /**
     * Metodo que retorna el numero de la izquierda.
     * @return numero de la izquierda.
     */
    public int getNumeroLeft ()
    {
        return numeroLeft;
    }
    /*
     * Metodo que setea si una ficha esta o no el el tablero
     * @param true o false si esta o no en el tablero de juego.
     */
    public void setEstaEnTablero ( boolean opcion )
    {
        this.estaEnTablero = opcion;
    }
    /**
     * metodo que retorna si la ficha esta o no en el tablero de juego.
     * @return true o false si la ficha esta o no en el tablero de juego.
     */
    public boolean getEstaEnTablero ()
    {
        return this.estaEnTablero;
    }

    /**
     * metodo que setea el numero de la izquierda
     * @param numeroLeft numero de la izquierda.
     */
    public void setNumeroLeft ( int numeroLeft )
    {
        this.numeroLeft = numeroLeft;
    }

    /**
     * metod que retorna el numero de la derecha.
     * @return numero de la derecha.
     */
    public int getNumeroRight ()
    {
        return numeroRight;
    }
    
    /**
     * metodo que setea el numero de la derecha
     * @param numeroRight  numero de la derecha.
     */
    public void setNumeroRight ( int numeroRight )
    {
        this.numeroRight = numeroRight;
    }

    /**
     *Metodo que retorna el numero de arriba.
     * @return numero de arriba.
     */
    public int getNumeroUp ()
    {
        return numeroUp;
    }

    /**
     * Metodo que setea el numero de arriba
     * @param numeroUp numero de arriba.
     */
    public void setNumeroUp ( int numeroUp )
    {
        this.numeroUp = numeroUp;
    }

    /**
     * metodo que retorna el color de abajo.
     * @return color de abajo.
     */
    public Color getColorDown ()
    {
        return colorDown;
    }

    /**
     * Metodo que setea el color de abajo.
     * @param colorDown color de abajo.
     */
    public void setColorDown ( Color colorDown )
    {
        this.colorDown = colorDown;
    }

    /**
     * metodo  que retorna el color de la izquierda.
     * @return color de la izquierda.
     */
    public Color getColorLeft ()
    {
        return colorLeft;
    }

    /**
     * metodo que setea el color de la izquierda.
     * @param colorLeft
     */
    public void setColorLeft ( Color colorLeft )
    {
        this.colorLeft = colorLeft;
    }

    /**
     *metodo que retorna el color de la derecha. 
     * @return color de la derecha
     */
    public Color getColorRight ()
    {
        return colorRight;
    }

    /**
     * metodo que setea el color de la derecha
     * @param colorRight
     */
    public void setColorRight ( Color colorRight )
    {
        this.colorRight = colorRight;
    }

    /**
     * metodo que retorna el color de arriba.
     * @return color de arriba.
     */
    public Color getColorUp ()
    {
        return colorUp;
    }

    /**
     * Metodo que setea el color de arriba 
     * @param colorUp color de arriba
     */
    public void setColorUp ( Color colorUp )
    {
        this.colorUp = colorUp;
    }

    /**
     * metodo que setea el punto inicial aux.
     * @param puntoInicial punto inicial.
     */
    public void setPuntoInicialAux ( Point puntoInicial )
    {
        this.puntoInicialAux = puntoInicial;
    }

    /**
     *metodo que setea el punto inicial
     * @param puntoInicial punto inicial
     */
    public void setPuntoInicial ( Point puntoInicial )
    {
        this.puntoInicial = puntoInicial;
        this.setPuntoInicialAux ( puntoInicial );
    }

    /**
     * Metodo que retorna el punto incial aux.
     * @return punto inicial aux
     */
    public Point getPuntoInicialAux ()
    {
        return this.puntoInicialAux;
    }

    /**
     *Metodo que retorna el punto incial
     * @return punto inicial.
     */
    public Point getPuntoInicial ()
    {
        return puntoInicial;
    }

    /**
     * Metodo que pinta las fichas.
     * @param g area grafica donde se pintara.
     */
    public void paint ( Graphics g )
    {
        if ( this.numeroDown > -1 && this.numeroLeft > -1 && this.numeroRight > -1 && this.numeroUp > -1 )
        {
            g.setFont ( font );

            int xRight[] =
            {
                puntoInicialAux.x + 100 , puntoInicialAux.x + 100 , puntoInicialAux.x + 50
            };
            int yRight[] =
            {
                puntoInicialAux.y , puntoInicialAux.y + 100 , puntoInicialAux.y + 50
            };
            int nRight = 3;

            int xDown[] =
            {
                puntoInicialAux.x , puntoInicialAux.x + 100 , puntoInicialAux.x + 50
            };
            int yDown[] =
            {
                puntoInicialAux.y + 100 , puntoInicialAux.y + 100 , puntoInicialAux.y + 50
            };
            int nDown = 3;

            int xUp[] =
            {
                puntoInicialAux.x , puntoInicialAux.x + 100 , puntoInicialAux.x + 50
            };
            int yUp[] =
            {
                puntoInicialAux.y , puntoInicialAux.y , puntoInicialAux.y + 50
            };
            int nUp = 3;

            int xLeft[] =
            {
                puntoInicialAux.x , puntoInicialAux.x , puntoInicialAux.x + 50
            };
            int yLeft[] =
            {
                puntoInicialAux.y , puntoInicialAux.y + 100 , puntoInicialAux.y + 50
            };
            int nLeft = 3;

            g.setColor ( colorRight );
            g.fillPolygon ( xRight , yRight , nRight );// triangulo de la derecha

            g.setColor ( colorDown );
            g.fillPolygon ( xDown , yDown , nDown );// triangulo inferior

            g.setColor ( colorUp );
            g.fillPolygon ( xUp , yUp , nUp );// triangulo superior

            g.setColor ( colorLeft );
            g.fillPolygon ( xLeft , yLeft , nLeft );// triangulo de la izquierda

            g.setColor ( Color.BLACK );

            //bordes 
            g.drawPolygon ( xRight , yRight , nRight );// borde para triangulo de la derecha
            g.drawPolygon ( xDown , yDown , nDown );// borde para triangulo inferior
            g.drawPolygon ( xLeft , yLeft , nLeft );// borde para triangulo de la izquierda
            g.drawPolygon ( xUp , yUp , nUp );// borde para triangulo superior

            g.setColor ( Color.WHITE );
            g.drawString ( new Integer ( this.numeroRight ).toString () , puntoInicialAux.x + 73 , puntoInicialAux.y + 57 );
            g.drawString ( new Integer ( this.numeroDown ).toString () , puntoInicialAux.x + 40 , puntoInicialAux.y + 85 );
            g.drawString ( new Integer ( this.numeroUp ).toString () , puntoInicialAux.x + 40 , puntoInicialAux.y + 25 );
            g.drawString ( new Integer ( this.numeroLeft ).toString () , puntoInicialAux.x + 10 , puntoInicialAux.y + 55 );

        }
    }

    /**
     *Metodo que reasigna la posicion inicial a una ficha
     */
    public void devolver ()
    {
        this.setPuntoInicialAux ( this.puntoInicial );
    }
}